#ifndef _MY_LIST_H_
#define _MY_LIST_H_

#include "node.h"

template<typename T>
class my_list {
	public:
		my_list() {};
		my_list(const my_list& orig) = delete;
		my_list& operator = (const my_list& orig) = delete;
		
		void push_front(const T& value);
		template<typename Function> void for_each(Function f);
		template<typename Predicate> shared_ptr<T> find_first_if(Predicate p);
		template<typename Predicate> void remove_if(Predicate p);
		node<T>* getHead();
		
		virtual ~my_list();
		
	protected:
		node<T> head;
};

#include "my_list.tcc"

#endif

